package com.whty.ssm.advices;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * Copyright 2016-2022 tianyu education Corporation, All Rights Reserved
 * http://www.whty.com.cn/
 *
 * @author wangming
 * @version 1.0
 * @date 2020/12/11 11:07
 * @since 1.0
 */


public class MyAdvice {
    /*前置通知*/
    public void before(){
        System.out.println("(前置通知)MyAdvice类中的before方法开始记录日志了");
    }
    /*后置通知*/
    public void afterReturning(){
        System.out.println("(后置通知)MyAdvice类中的afterReturning方法开始记录日志了");
    }
    /*异常通知*/
    public void afterThrowing(){
        System.out.println("(异常通知)MyAdvice类中的afterThrowing方法开始记录日志了");
    }
    /*最终通知*/
    public void after(){
        System.out.println("(最终通知)MyAdvice类中的after方法开始记录日志了");
    }
    /*环绕通知*/
    public Object around(ProceedingJoinPoint pjp){

        Object rtValue = null;
        try{

            Object[] args = pjp.getArgs();//得到方法执行所需的参数

            System.out.println("MyAdvice类中的around方法开始记录日志了。。。前置");

            rtValue = pjp.proceed(args);//明确调用业务层方法（切入点方法）

            System.out.println("MyAdvice类中的around方法开始记录日志了。。。后置");

            return rtValue;
        }catch (Throwable t){

            System.out.println("MyAdvice类中的around方法开始记录日志了。。。异常");
            throw new RuntimeException(t);
        }finally {

            System.out.println("MyAdvice类中的around方法开始记录日志了。。。最终");
        }
    }
}
